[IA64] bug fix reserve_memory()
authorawilliam@xenbuild.aw <awilliam@xenbuild.aw>
Fri, 24 Feb 2006 15:44:34 +0000 (08:44 -0700)
committerawilliam@xenbuild.aw <awilliam@xenbuild.aw>
Fri, 24 Feb 2006 15:44:34 +0000 (08:44 -0700)
reserved_region[].start is of virtual address in identity
mapping. not physical address.

Signed-off-by: Isaku Yamahata <yamahata@valinux.co.jp>
linux-2.6-xen-sparse/arch/ia64/kernel/setup.c
linux-2.6-xen-sparse/include/asm-ia64/meminit.h

index a67579cdc4d13ef7e1379c01990bbae8d3a8c7bc..6f4595b8d0acd3b81ff4f855439a98e11e33b5c3 100644 (file)
@@ -247,9 +247,11 @@ reserve_memory (void)
        n++;
 
 #ifdef CONFIG_XEN
-       rsvd_region[n].start = (unsigned long) (HYPERVISOR_shared_info->arch.start_info_pfn << PAGE_SHIFT);
-       rsvd_region[n].end   = rsvd_region[n].start + PAGE_SIZE;
-       n++;
+       if (running_on_xen) {
+               rsvd_region[n].start = (unsigned long)__va((HYPERVISOR_shared_info->arch.start_info_pfn << PAGE_SHIFT));
+               rsvd_region[n].end   = rsvd_region[n].start + PAGE_SIZE;
+               n++;
+       }
 #endif
 
 #ifdef CONFIG_BLK_DEV_INITRD
@@ -269,6 +271,7 @@ reserve_memory (void)
        n++;
 
        num_rsvd_regions = n;
+       BUG_ON(IA64_MAX_RSVD_REGIONS + 1 < n);
 
        sort_regions(rsvd_region, num_rsvd_regions);
 }
index 46501b01a5c58589055927e2dabdbde43e6c3ed5..9a4afc3a3514ae77ee4abcd23833aa4d103b783c 100644 (file)
  *     - command line string
  *     - kernel code & data
  *     - Kernel memory map built from EFI memory map
+ *     - xen start info
  *
  * More could be added if necessary
  */
+#ifndef CONFIG_XEN
 #define IA64_MAX_RSVD_REGIONS 6
+#else
+#define IA64_MAX_RSVD_REGIONS 7
+#endif
 
 struct rsvd_region {
        unsigned long start;    /* virtual address of beginning of element */